home *** CD-ROM | disk | FTP | other *** search
/ Network Support Library / RoseWare - Network Support Library.iso / apidev / netusr.arc / NETUSERS.PAS next >
Pascal/Delphi Source File  |  1990-07-28  |  4KB  |  130 lines

  1. {**********************************************************}
  2. {*                  NETUSERS.PAS 1.01                     *}
  3. {*      Released to the public domain by the author       *}
  4. {*         Rob Roberts    74017,3503    7/28/90           *}
  5. {**********************************************************}
  6.  
  7. {
  8.   This unit interfaces three functions, GetUserName, CurrentUserIsMemberOf,
  9.   and CurrentUserIsSupervisorEquivalent. They work only on Novell networks, and
  10.   have been tested on ELS II v2.15, and NetWare 386 v3.0.
  11.  
  12.   Requires the NetWare unit from TurboPower Software's B-Tree Filer 5.0.
  13. }
  14.  
  15.  
  16. {$S-,R-,I-,V-,B-,F-}
  17. unit NetUsers;
  18.  
  19. interface
  20.  
  21. uses Dos, NetWare;
  22.  
  23. function GetUserName : ObjectStr;
  24. { returns login name of current user }
  25.  
  26. function CurrentUserIsMemberOf(GroupName : ObjectStr) : boolean;
  27. { returns TRUE if current user is a member of group GroupName }
  28.  
  29. function CurrentUserIsSupervisorEquivalent : boolean;
  30. { returns TRUE if current user is Supervisor or Supervisor-equivalent }
  31.  
  32. implementation
  33.  
  34. type Str15 = string[15];
  35.  
  36. function IsBinderyObjInSet(ObjectName   : ObjectStr;
  37.                            ObjectType   : BinderyObject;
  38.                            PropertyName : Str15;
  39.                            MemberType   : BinderyObject;
  40.                            MemberName   : ObjectStr) : boolean;
  41.  
  42. var
  43.   NovRegs          : Registers;
  44.   Request          : record
  45.                        Len      : Word;
  46.                        SubF     : Byte;
  47.                        ObjType  : Word;
  48.                        Filler   : string[113]
  49.                      end;
  50.   Reply            : Word;
  51.   W                : Word;
  52.   I                : byte;
  53.  
  54. begin
  55.   with Request do
  56.     begin
  57.       Len := 8 + length(ObjectName) + length(PropertyName) + length(MemberName);
  58.       SubF    := $43;
  59.       ObjType := Swap(Word(Ord(ObjectType)));
  60.       Filler  := ObjectName;
  61.       I       := length(ObjectName)+1;
  62.       move(PropertyName, Filler[I], length(PropertyName)+1);
  63.       inc(I, length(PropertyName)+1);
  64.       W := Swap(Word(Ord(MemberType)));
  65.       move(W, Filler[I], 2);
  66.       inc(I, 2);
  67.       move(MemberName, Filler[I], length(MemberName)+1)
  68.     end;
  69.   with NovRegs do
  70.     begin
  71.       AH := $E3;
  72.       DS := Seg(Request);  {DS:SI points to request}
  73.       SI := Ofs(Request);
  74.       ES := Seg(Reply);    {ES:DI points to reply}
  75.       DI := Ofs(Reply);
  76.       MsDos(NovRegs)
  77.     end;
  78.   IsBinderyObjInSet := NovRegs.AL = 0
  79. end;
  80.  
  81.  
  82. function GetUserName : ObjectStr;
  83.  
  84. var
  85.     ConnInfo : ConnInfoType;
  86.     LoggedIn : boolean;
  87.  
  88. begin
  89.   if NetwareLoaded(LoggedIn) and LoggedIn then
  90.     begin
  91.       GetConnInfo(GetConnNo, ConnInfo);
  92.       GetUserName := ConnInfo.ObjectName
  93.     end
  94.   else GetUserName := 'UNKNOWN'
  95. end;  { GetUserName }
  96.  
  97.  
  98. function CurrentUserIsMemberOf(GroupName : ObjectStr) : boolean;
  99.  
  100. var LoggedIn : boolean;
  101.  
  102. begin
  103.   if NetwareLoaded(LoggedIn) and LoggedIn then
  104.     CurrentUserIsMemberOf := IsBinderyObjInSet(GetUserName, ObjUser,
  105.                                  'GROUPS_I''M_IN', ObjGroup, GroupName)
  106.   else CurrentUserIsMemberOf := false
  107. end;  { CurrentUserIsMemberOf }
  108.  
  109.  
  110. function CurrentUserIsSupervisorEquivalent : boolean;
  111.  
  112. var
  113.     LoggedIn : boolean;
  114.     UserName : string[48];
  115.  
  116. begin
  117.   if NetwareLoaded(LoggedIn) and LoggedIn then
  118.     begin
  119.       UserName := GetUserName;
  120.       CurrentUserIsSupervisorEquivalent := (UserName = 'SUPERVISOR') or
  121.           IsBinderyObjInSet(GetUserName, ObjUser, 'SECURITY_EQUALS', ObjUser, 'SUPERVISOR')
  122.     end
  123.   else CurrentUserIsSupervisorEquivalent := false
  124. end;  { CurrentUserIsMemberOf }
  125.  
  126.  
  127. end.  { NetUsers }
  128.  
  129.  
  130.